"""
主题: 使用元类控制实例的创建
问题: 你想通过改变实例创建方式来实现单例、缓存或其他类似的特性。
提示 : 
"""

class NoInstances(type):
    def __call__(self, *args, **kwargs):
        raise TypeError("Can't instantiate directly")

# Example
class Spam(metaclass=NoInstances):
    @staticmethod
    def grok(x):
        print('Spam.grok')


def recipe1():
    try:
        Spam()
    except TypeError as e:
        print(e)    

    print(f"{Spam.grok(1) = }")

def main():
    print('recipe1'.center(20, '*'))
    recipe1()

if __name__ == '__main__':
    main()           